<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="./lib/bootstrap-v4.6.0.css">
  <style>
    body {
      padding: 10px;
    }

    .thumb {
      display: block;
      width: 500px;
      height: 340px;
      background-color: #efefef;
      margin-top: 30px;
    }
  </style>
</head>

<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-4">
        <div class="custom-file">
          <!-- 文件选择框 -->
          <input type="file" accept="image/png, image/jpeg, image/gif" class="custom-file-input" id="customFile">
          <label class="custom-file-label" for="customFile">Choose image</label>
        </div>
      </div>
      <div class="col-sm-4">
        <!-- 上传图片的按钮 -->
        <button class=" btn btn-primary" id="btnUpload">上传图片</button>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-4">
        <!-- 上传的进度条 -->
        <div class="progress mt-3">
          <div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="25" aria-valuemin="0"
            aria-valuemax="100">0%</div>
        </div>
        <!-- loading 图标 -->
        <div class="spinner-border text-primary loading" style="display: none;" role="status">
          <span class="sr-only">Loading...</span>
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-4">
        <figure class="figure">
          <!-- 缩略图 -->
          <img src="" class="thumb figure-img img-fluid rounded" alt="已上传的图片">
          <figcaption class="figure-caption">已上传的图片</figcaption>
        </figure>
      </div>
    </div>
  </div>
  <script src="./lib/jquery-v3.6.0.js"></script>
  <script>
    // TODO：实现上传文件的功能

    // 1. 封装上传文件的方法
    $(function () {
      // 为document绑定ajaxStart和ajaxStop事件
      $(document).ajaxStart(function () {
        console.log('当前页面发起了一个Ajax请求!');
        // 展示loading效果
        $('.loading').show()
      })
      $(document).ajaxStop(function () {
        console.log('当前页面Ajax请求完成了!');
        // 隐藏loading效果
        $('.loading').hide()
      })
      //封装JQuery 上传文件的方法
      function uploadImage(fd) {
        $.ajax({
          type: 'POST',
          url: 'http://www.liulongbin.top:3006/api/upload/avatar',
          data: fd,
          //contentType:false 用来指定请求体中的数据格式为multipart/form-data
          contentType: false,
          // processData: false,表示不需要对请求体中的数据进行URL的编码,而是直接把FormData发送到服务器
          processData: false,
          success: function (res) {
            if (res.status === 200) {
              $('.thumb').attr('src', 'http://www.liulongbin.top:3006' + res.url)
            } else {
              alert(res.message)
            }
          }
        })
      }
      //为上传按钮设置点击事件
      $('#btnUpload').on('click', function () {
        // 获取用户选择的文件们
        const files = $('#customFile')[0].files
        if (files.length === 0) return alert('请选择要上传的文件')
        //创建FormData 对象
        const fd = new FormData()
        fd.append('avatar', files[0])
        // 调用上传文件的方法
        uploadImage(fd)
      })
    })

  </script>
</body>

</html>